package list_users

import (
	"errors"
	"youdu/model"
	modelJielong "youdu/model/jielong"
	modelYoudu "youdu/model/youdu"
	tasksJielong "youdu/tasks/jielong"
)

func Find(id interface{}, rows *[]modelJielong.ListUsers) error {
	if err := model.Db.Where("list_id = ?", id).Find(&rows).Error; err != nil {
		return errors.New("查询失败：" + err.Error())
	}
	return nil
}
func Add(user *modelJielong.ListUsers) error {
	// 插入新纪录
	result := model.Db.Create(&user)
	if result.Error != nil {
		// common.ResFail(c, "创建失败："+result.Error.Error())
		return errors.New("创建失败：" + result.Error.Error())
	}
	// 投递 list id 到tasks去更新
	// tasksJielong.Ids = user.ListID
	tasksJielong.NewID(user.ListID)
	return nil
}

func Update(user *modelJielong.ListUsers) error {
	if err := model.Db.Model(&modelJielong.ListUsers{}).Where("id = ?", user.ID).Update("content", user.Content).Error; err != nil {
		return errors.New("更新失败：" + err.Error())
	}
	return nil
}

func Del(id interface{}, cu modelYoudu.UserInfo) error {
	// 开启事务
	tx := model.Db.Begin()
	// 查询纪录
	var user modelJielong.ListUsers
	if err := model.Db.Where("id = ?", id).First(&user).Error; err != nil {
		tx.Rollback()
		return errors.New("删除失败：" + err.Error())
	}
	// 严格验证是否本人发起的，防止有心人随意得到别人的ID进行删除
	if user.UserAccount != cu.Account {
		tx.Rollback()
		return errors.New("你不能删除别人的")
	}
	// common.ResFail(c, "你不能删除别人的")
	// 删除纪录
	if err := model.Db.Delete(&modelJielong.ListUsers{}, id).Error; err != nil {
		tx.Rollback()
		return errors.New("删除失败：" + err.Error())
	}
	// 获取已接龙的人数
	var count int64
	model.Db.Model(&modelJielong.ListUsers{}).Where("list_id = ?", user.ListID).Count(&count)
	// 更新已接龙人数
	if err := model.Db.Model(&modelJielong.Lists{}).Where("id = ?", user.ListID).Update("users_count", count).Error; err != nil {
		tx.Rollback()
		return errors.New("更新失败：" + err.Error())
	}
	// 提交事务
	if err := tx.Commit().Error; err != nil {
		tx.Rollback()
		return errors.New("提交失败：" + err.Error())
	}
	return nil
}
